#pragma once

namespace ecarx::vhal::core::property::WpcUtil {

/**
 * 获取 WPC（WPCModuleSts） 状态
 * DHU支持双WPC外设：
 * 1.如果只收到WPCModuleSts，未收到WPCModuleStsBNCM2，则WPC_Status = WPCModuleSts
 * 2.如果只收到WPCModuleStsBNCM2，未收到WPCModuleSts，则WPC_Status = WPCModuleStsBNCM2
 * 3.如果WPCModuleSts超时，WPCModuleStsBNCM2未超时，则WPC_Status =WPCModuleStsBNCM2
 * 4.如果WPCModuleSts未超时，WPCModuleStsBNCM2超时，则WPC_Status = WPCModuleSts
 * 5.如果WPCModuleSts和WPCModuleStsBNCM2都超时，那么DHU应该保持上一个状态
 */
inline int getWPCModuleStatus(int32_t lastValue) {
    int32_t wpcSts = -1;
    if (SIGNAL.carConfigIs(SignalRX::carconfig366, sdb::CarConfig366::_02, sdb::CarConfig366::_03)) {
        sdb::Timeout wpcModuleStsBNCM2Timeout = SIGNAL.getWPCModuleStsBNCM2Timeout();
        int32_t wpcModuleStsBNCM2 = toInt(SIGNAL.getWPCModuleStsBNCM2());
        VHALOG.d(
            "WPC_FUNC_CHARGE_STATES getWPCModuleStatus: "
            "wpcModuleStsBNCM2Timeout[%d]、wpcModuleStsBNCM2[%d]",
            toInt(wpcModuleStsBNCM2Timeout), wpcModuleStsBNCM2);
        // 如果WPCModuleSts超时，WPCModuleStsBNCM2未超时，则WPC_Status =WPCModuleStsBNCM2

        if (wpcModuleStsBNCM2Timeout == sdb::Timeout::NoTimeout) {
            VHALOG.d("WPC_FUNC_CHARGE_STATES getWPCModuleStatus: WPCModuleSts  timeout");
            wpcSts = wpcModuleStsBNCM2;
        }
    }
    return wpcSts;
}

}  // namespace ecarx::vhal::core::property::WpcUtil